/*
 * @Description: 文件相关
 * @Author: HuiSir<273250950@qq.com>
 * @Date: 2021-09-02 18:06:40
 * @LastEditTime: 2025-11-21 11:54:04
 */
import Req from "@/utils/Request";
import { basename } from "@/ui/helpers/path";
const Prefix = "/file";

/**
 * 文件上传API请求函数
 *
 * @param data 包含要上传的文件及其类型的数据对象
 * @returns 返回一个Promise对象，该对象解析为文件上传请求的响应
 */
export const fileUpload: ApiRequest<{ file: Blob; fileType?: string }> = (
  data
) => {
  const formData = new FormData();
  const { file, fileType = basename(location.pathname) } = data;

  // 处理Blob文件，确保有文件名
  const fileName = `${Date.now()}.${file.type.split("/")[1] || "bin"}`;
  formData.append("file", file, fileName);
  formData.append("fileType", fileType);
  return Req.post("/file/upload", formData);
};

/**
 * 获取文件列表的分页接口
 *
 * @param params 分页参数
 * @returns 返回文件列表的分页结果
 */
export const getFileListByPage: ApiRequest<GetFileListParams> = (params) =>
  Req.get(`${Prefix}/getFileListByPage`, { params });

/**
 * 更新文件请求函数
 *
 * @param params 文件参数对象，类型必须为IFileParams
 * @returns ApiRequest<FileParams> 类型的 ApiRequest 实例
 */
export const update: ApiRequest<FileParams> = (params) =>
  Req.post(`${Prefix}/update`, params);

/**
 * 根据文件ID删除文件
 *
 * @param id 文件ID
 * @returns ApiRequest<string> 返回一个ApiRequest对象，其中包含一个字符串类型的响应
 */
export const removeFileById: ApiRequest<string> = (id) =>
  Req.post(`${Prefix}/removeFileById`, { id });

/**
 * 获取文件分组列表的API请求
 *
 * @returns 返回ApiRequest对象，表示一个API请求
 */
export const getFileGroupList: ApiRequest = () =>
  Req.get(`${Prefix}/getFileGroupList`);
